How frequently revisited sites differ between individuals and the sex of the spotted nutcracker in Davos

Project for Patterns and Trends in Environmental Data - 2025

Author

Simon Behringer and Marius King

Code: load libraries
pacman::p_load(
  adehabitatHR,
  cluster,
  dplyr,
  forcats,
  ggplot2,
  ggpubr,
  ggridges,
  knitr,
  lubridate,
  multcompView,
  patchwork,
  pacman,
  pracma,
  purrr,
  readr,
  recurse,
  sf,
  terra,
  tidyr,
  viridis,
  wordcountadding
)


set.seed(123)
Code: setup ggplot theme
theme_set(
  theme_bw()
)

scale_lv95_axes <- function() {
  list(
    scale_x_continuous(
      limits = c(2781000, 2789000),
      minor_breaks = c(2781000, 2783000, 2785000, 2787000, 2789000),
      breaks = c(2782000, 2784000, 2786000, 2788000)
    ),
    scale_y_continuous(
      limits = c(1185000, 1195000),
      minor_breaks = c(1185000, 1187000, 1189000, 1191000, 1193000, 1195000),
      breaks = c(1186000, 1188000, 1190000, 1192000, 1194000)
    ),
    coord_sf(
      datum = st_crs(2056),
      expand = F
    ),
    theme(
      axis.text.x = element_text(angle = 45, hjust = 1),
    )
  )
}

scale_animal_id <- function() {
  list(
    scale_color_brewer(
      palette = "Spectral",
      name = "animal id",
    ),
    scale_fill_brewer(
      palette = "Spectral",
      name = "animal id",
    )
  )
}

scale_animal_sex <- function() {
  list(
    scale_fill_brewer(
      palette = "Spectral",
      name = "animal sex",
      labels = c("female","male")
    ),
    scale_color_brewer(
      palette = "Spectral",
      name = "animal sex",
      labels = c("female","male")
    )
  )
}
Code: preprocessing
background <- png::readPNG("data/swissimage2.5m_latest.png")   

spotted_nutcrackers_ref_data <- read_delim("data/reference_data_spotted_nutcrackers.csv") |>
  mutate(across(where(is.character), as.factor)) |> 
  mutate(
    tag_id = factor(tag_id)
  )

spotted_nutcrackers_gps <- read_delim("data/gps_spotted_nutcrackers.csv") |>
  mutate(
    tag_local_identifier = factor(tag_local_identifier),
    timestamp = as.POSIXct(timestamp, format = "%d/%m/%Y %H:%M"),
    across(where(is.character), as.factor))

spotted_nutcrackers <- left_join(
  spotted_nutcrackers_gps,
  spotted_nutcrackers_ref_data,
  join_by(individual_local_identifier == animal_id)
) |> 
  st_as_sf(coords = c("location_long", "location_lat"),
           crs = 4326) |>  # Setzt ursprüngliches CRS
  st_transform(crs = 2056) |>  # Transformiert ins LV95
  mutate(CH_X = st_coordinates(geometry)[, 1], # Extrahiert neue X-Koordinaten
         CH_Y = st_coordinates(geometry)[, 2]) |>
  st_drop_geometry()

Background and Research Goals

More than 70% of the world’s woody plant species rely on animals for seed dispersal (Jordano, Bascompte, and Olesen 2003). Birds play a central role in this process, as their high mobility allows them to transport seeds over long distances (Fandos et al. 2023). Previous studies on animal-mediated seed dispersal have primarily focused on interspecific differences and used morphological traits such as body size or wing length to explain variations in dispersal distances (Böhning-Gaese et al. 2006; Li et al. 2018). Such trait-based approaches allow for predictions of seed dispersal at the species or community level (Jordano, Bascompte, and Olesen 2003; Schleuning, Fründ, and García 2015; Buchholz et al. 2019).

More recently, however, increasing emphasis has been placed on including individual differences within a species—particularly behavioural traits—in seed dispersal studies (Zwolak and Sih 2020). Studies have shown that individuals within a population can differ consistently in their behaviour, which may influence the effectiveness of seed dispersal (Dall, Houston, and McNamara 2004; Wolf and Weissing 2012). For example, an animal’s personality—such as its boldness—can determine whether it acts as a seed predator or a seed disperser (Brehm and Mortelliti 2022).

Spotted nutcrackers (Nucifraga caryocatactes) are corvids that maintain a mutualistic relationship with the Swiss stone pine (Pinus cembra). In late summer, they harvest the ripe seeds and cache them in the ground as food reserves, thereby playing a key role in the regeneration of the tree species (Mattes 1982; Neuschulz et al. 2015). GPS tracking data from these birds make it possible to identify frequently visited locations and draw conclusions about individual harvesting and caching behaviours (Hertel et al. 2020; Auffret et al. 2017; Graf et al. 2024). The aim of this study is to analyse GPS movement data from individual spotted nutcrackers in the Swiss Alps to address the following research questions:

  1. How do frequently visited sites differ between individuals, and can spatial clusters be identified?
  2. Do visitation patterns differ between male and female birds in terms of their spatial distribution?

Material and Methods

Study Area

Both studies (Sorensen et al. 2022; Graf et al. 2024) tracked spotted nutcracker movements in 2017 and 2018 within a ~15 km² area around Davos in the eastern Swiss Alps (Figure 1). In this region, Swiss stone pine (Pinus cembra) forms the upper treeline between 1850 and 2200 m a.s.l., with the highest densities at mid-elevations. Valley bottoms are dominated by Norway spruce (Picea abies) and European larch (Larix decidua), where Swiss stone pine is scarce.

Study Area around Davos
Figure 1: Study Area around Davos

Data

The data used consists of two datasets: one containing GPS localizations with x/y coordinates, timestamps, and individual identifiers, and a reference dataset with additional information on each individual, such as sex, weight, and wingspan. In total, data from 31 individuals were recorded, tracked over varying time periods and at different temporal resolutions, with localization intervals ranging from 15 to 60 minutes. We only used data collected in the months of august and september in 2017 and 2018. Individuals were tracked between 10:00 and 20:00 with a 15 minute frequency. For the identification of the freqeuntly revisited sites, we used all gps localizations, for the analysis of the stepwidth only those with a time lag of 15 minutes to the previous localization.

Code: data filtering
spotted_nutcrackers_filter <- spotted_nutcrackers |> 
  group_by(animal_ring_id) |> 
  summarise(
    count = n(),
    start =first(timestamp),
    last=last(timestamp),
    duration = last - start 
  ) |> 
  filter(
    duration > 5,
    start |> year() %in% c(2017,2018),
    last |> year() %in% c(2017,2018),
    !animal_ring_id %in% c("K96915","K96934")
  ) |> 
  pull(animal_ring_id)

spotted_nutcrackers_filtered <- spotted_nutcrackers |> 
  filter(animal_ring_id %in% spotted_nutcrackers_filter) 
Code
spotted_nutcrackers_filtered |> 
  dplyr::select(animal_ring_id, timestamp, CH_X, CH_Y, animal_sex) |> 
  head() |> 
  kable()
Table 1: excerpt of the data used
animal_ring_id timestamp CH_X CH_Y animal_sex
K125864 2018-08-10 16:15:00 2788349 1186097 f
K125864 2018-08-10 16:45:00 2788316 1186106 f
K125864 2018-08-10 17:15:00 2788242 1186158 f
K125864 2018-08-10 17:45:00 2787367 1186915 f
K125864 2018-08-11 10:00:00 2787844 1186519 f
K125864 2018-08-11 11:00:00 2787889 1186550 f

Method

To identify highly revisited sites, we applied the workflow described by Sorensen et al. (2022), conducting a recursion analysis for each bird’s GPS locations using the R package recurse (Bracis, Bildstein, and Mueller 2018). Each GPS point was treated as a potential revisitation site by defining a 250 m radius around it. We then counted the number of revisits, i.e., instances where a bird returned to the same site. The density distribution of revisits often exhibited a multi- or bimodal pattern. The lowest local minimum was used as a threshold to distinguish points with few or no revisits from frequently revisited points.

Code: recursion analysis
find_local_minimum <- function(values) {
  d <- density(values)
  dy <- d$y
  dx <- d$x
  minima_idx <- which(diff(sign(diff(dy))) == 2) + 1
  if (length(minima_idx) == 0) return(NA)
  minima_x <- dx[minima_idx]

  lowest_minimum <- minima_x |> min()
  
  return(lowest_minimum)
}

spotted_nutcrackers_recurse <- spotted_nutcrackers_filtered |>
  group_by(animal_ring_id) |>
  group_map(~ {
    rec <- .x |> dplyr::select(CH_X, CH_Y, timestamp, individual_local_identifier) |> 
      as.data.frame() |> 
      getRecursions(radius = 250, timeunits = "mins")
    rec$revisitStats
  }) |> 
  map_dfr(~ .x) |> 
  group_by(id, coordIdx, x, y) |> 
  summarise(revisits = n(), .groups = "drop") |> 
  group_by(id) |> 
  mutate(
    threshold = find_local_minimum(revisits),
    mean = mean(revisits),
    median = median(revisits),
    max_revisits = max(revisits),
    freq_revisited = revisits >= threshold
  ) |> 
  ungroup() |> 
  left_join(
    spotted_nutcrackers_ref_data,
    by = join_by(id == animal_id)
  )

The frequently revisited points then underwent a spatial fuzzy cluster analysis. For each individual they were grouped into two distinct clusters using the R package cluster (Maechler et al. 2024). If the two centorides of the two clusters were closer than 250 m together, they were combined into a single cluster. Extracting the 95% minimum convex polygon for each cluster using the adehabitatHR package (Calenge 2024) resulted in one or two frequently revisited sites for each bird.

Code: clustering
spotted_nutcrackers_points <- spotted_nutcrackers_recurse |> 
  st_as_sf(coords = c("x", "y"), crs = 2056)

spotted_nutcrackers_clustered_points <- spotted_nutcrackers_recurse |> 
  filter( freq_revisited) |> 
  dplyr::select(id, x, y, animal_sex,  freq_revisited) |> 
  group_by(id) |> 
  group_modify(~ {
    coords <- dplyr::select(.x, x, y)

    if (nrow(coords) < 2) {
      .x$cluster <- NA
    } else {
      coords_sf <- st_as_sf(coords, coords = c("x", "y"), crs = 2056)
      
      pam_result <- pam(st_coordinates(coords_sf), k = 2)
      .x$cluster <- pam_result$clustering

      cluster_centroids <- coords_sf |>
        mutate(cluster = .x$cluster) |>
        group_by(cluster) |>
        summarise(geometry = st_centroid(st_union(geometry))) |>
        st_as_sf()

      dist_between_clusters <- st_distance(cluster_centroids[1, ], cluster_centroids[2, ])

      if (as.numeric(dist_between_clusters) <= 250) {
        .x$cluster <- 1
      }
    }

    return(.x)
  }) |> 
  ungroup() |> 
  mutate(id_cluster = paste(id, cluster, sep = "_")) |> 
  group_by(id_cluster) |> 
  filter(n() >= 5) |> 
  ungroup() |> 
  st_as_sf(coords = c("x", "y"), crs = 2056) |> 
  as("Spatial")
Code: extract 95% minimum convex polygon
spotted_nutcrackers_clustered_mcp <- spotted_nutcrackers_clustered_points["id_cluster"] |> 
  mcp(percent = 95) |> 
  st_as_sf(crs = 2056) |> 
  separate(id, into = c("id", "cluster"), sep = "_") |> 
  arrange(area |> desc()) |> 
  left_join(
    spotted_nutcrackers_ref_data,
    join_by(id==animal_id)
  )

To quantify movement activity, we calculated the stepwidth (Euclidean distance in meters) between consecutive GPS locations for each individual. The stepwidth was computed using a custom function that calculates pairwise distances between subsequent locations. Additionally, the time lag between fixes was calculated in minutes, and only steps with a regular 15-minute interval were retained for analysis to ensure temporal consistency.

Code: calculate stepwidth
get_stepwidth = function(geometry, n = 1) {
  st_distance(lag(geometry, n = n), geometry, by_element = TRUE) |> as.numeric()
}

get_timelag = function(datetime, n = 1, units = "secs") {
  difftime(lead(datetime, n = n), datetime, units = units) |> as.numeric()
}

spotted_nutcrackers_stepwidth <- spotted_nutcrackers_filtered |> 
  st_as_sf(coords = c("CH_X", "CH_Y"), crs = 2056) |> 
  group_by(animal_ring_id) |>
  mutate(
    stepwidth = geometry |>  get_stepwidth(),
    timelag = timestamp |> get_timelag(units="mins"),
    speed_m_sec = stepwidth / (timelag * 60),
    speed_km_h = speed_m_sec * 3.6
  ) |> 
  ungroup() |> 
  dplyr::select(animal_ring_id, timestamp, stepwidth, timelag, animal_sex,animal_group_id) |> 
  filter(timelag==15) |>
  mutate(CH_X = st_coordinates(geometry)[, 1], 
         CH_Y = st_coordinates(geometry)[, 2]) |>
  st_drop_geometry()

To assess potential differences in movement behavior, we visualized stepwidth distributions with boxplots grouped by individuals and sex. We performed ANOVAs to test for significant differences in stepwidth between the individuals as well as males and females. Stepwidth therefore was transformed using the log10 function.

Code: Anova
spotted_nutcrackers_aov <- aov(log10(stepwidth)~animal_ring_id, data=spotted_nutcrackers_stepwidth)

spotted_nutcrackers_tukey <- spotted_nutcrackers_aov |> TukeyHSD()
spotted_nutcrackers_aov_letters <- multcompLetters4(
  spotted_nutcrackers_aov,
  spotted_nutcrackers_tukey
)

spotted_nutcrackers_aov_label <- data.frame(
      animal_ring_id = names(spotted_nutcrackers_aov_letters$animal_ring_id$Letters),
      group = spotted_nutcrackers_aov_letters$animal_ring_id$Letters |> factor(levels = c("a","ab","abc","bc","c"), ordered=T))


spotted_nutcrackers_aov_sex <- aov(log10(stepwidth)~animal_sex, data=spotted_nutcrackers_stepwidth)
Code
spotted_nutcrackers_points <- spotted_nutcrackers_points |> 
  left_join(
    spotted_nutcrackers_aov_label,
    join_by(animal_ring_id)
  ) |> 
  mutate(
    animal_ring_id = fct_reorder(animal_ring_id, group |> factor() |>  as.numeric())
  )

spotted_nutcrackers_stepwidth <- spotted_nutcrackers_stepwidth |> 
  left_join(
    spotted_nutcrackers_aov_label,
    join_by(animal_ring_id)
  ) |> 
  mutate(
    animal_ring_id = fct_reorder(animal_ring_id, group |> factor() |>  as.numeric())
  )

spotted_nutcrackers_clustered_mcp <- spotted_nutcrackers_clustered_mcp |> 
  left_join(
    spotted_nutcrackers_aov_label,
    join_by(animal_ring_id)
  ) |> 
  mutate(
    animal_ring_id = fct_reorder(animal_ring_id, group |> factor() |>  as.numeric())
  )

Results

The threshold value for distinguishing GPS localizations with infrequent revisits from those with frequent revisits ranges from 11.9 to 45.2, depending on the individual and their density curve of the number of revitis per GPS localization from the recursion analysis (Figure 2).

Code
spotted_nutcrackers_points |>   
  ggplot(aes(revisits, fill=animal_sex)) +
  geom_density() + 
  facet_wrap(.~animal_ring_id, ncol=5,scales="free")+
  geom_vline(
    aes(xintercept = threshold),
    color = "blue", linewidth = 0.5
  )+
  labs(
    y="density"
  )+
  geom_text(
    aes(
      max_revisits/2,
      0,
      label = paste0("threshold: ",round(threshold, 1))
    ),
    color="blue",
    vjust = -0.5, 
    size = 3
  )+
  scale_animal_sex()
Figure 2: Density of revisitation of GPS localizations per individual

The visualization of the frequently revisited GPS localization already shows a distinct pattern of frequently revisited sites (Figure 3). Clustering these points into two clusters and extracting the 95% minimum convex polygons for each individual results in two frequently revisited sites further than 250 meters apart for 9 out of 10 individuals. In one case, the two clusters are closer than 250 meters, so we identified only one frequently revisited location for this individual. All but one individual showed consistent revisits to one area in the southeast and another in the northeast or east.

Code
p1 <- ggplot()+
  background_image(background)+
  geom_sf(
    aes(color=factor(animal_ring_id)),
    data=spotted_nutcrackers_points |> 
      filter(!freq_revisited),
    alpha=0.2
  )+
  geom_sf(
    aes(color=factor(animal_ring_id)), 
    data=spotted_nutcrackers_points |> 
      filter(freq_revisited)
  )+
  scale_animal_id() +
  scale_lv95_axes()+
  theme(legend.position = "none")

p2 <- ggplot() +
  background_image(background)+
  geom_sf(
    aes(color=factor(animal_ring_id)), 
    data=spotted_nutcrackers_points |> 
      filter(!freq_revisited),
    alpha=0.2
  )+
  geom_sf(
    aes(fill = factor(animal_ring_id)),
    data=spotted_nutcrackers_clustered_mcp
  ) +
  scale_animal_id() +
  scale_lv95_axes()


p1 + 
  p2 + 
  plot_layout(widths = c(5,5)) + 
  plot_annotation(tag_levels = "A")
Figure 3: Identified frequently revisited sites classfied by individuals as (A) points and (B) 95% minimum convex polygones

Figure 4 shows the same frequently revisited GPS locations, now grouped by animal sex. Both female and male individuals exhibit consistent use of distinct areas, particularly in the southeast and northeast of the study area.

Code
p3 <- ggplot()+
  background_image(background)+
  geom_sf(
    aes(color=animal_sex), 
    data= spotted_nutcrackers_points|> 
      filter(!freq_revisited),
    alpha=0.2
  )+
  geom_sf(
    aes(color=animal_sex), 
    data=spotted_nutcrackers_points |> 
      filter(freq_revisited)
  )+
  scale_animal_sex()+
  scale_lv95_axes()+
  theme(legend.position = "none")

p4 <- ggplot() +
  background_image(background)+
  geom_sf(
    aes(color=animal_sex), 
    data=spotted_nutcrackers_points |> 
      filter(!freq_revisited),
    alpha=0.2
  )+
  geom_sf(
    aes(fill = factor(animal_sex)),
    data=spotted_nutcrackers_clustered_mcp
  ) +
  scale_animal_sex()+
  scale_lv95_axes()

p3 + 
  p4 + 
  plot_layout(widths = c(5,5)) + 
  plot_annotation(tag_levels = "A")
Figure 4: Identified frequently revisited sites classfied by animal sex as (A) points and (B) 95% minimum convex polygones

The analysis of variance indicates significant differences regarding stepwidth among individuals (p = 9.21e-11) as well as between sexes (p = 3.9e-05; Figure 5), with female animals showing a slightly greater stepwidth than male.

Code
p5 <- spotted_nutcrackers_stepwidth |> 
  ggplot(aes(x = stepwidth, 
             y = animal_ring_id |> fct_rev(), 
             fill = animal_sex)) +
  geom_density_ridges(scale=2) + 
  geom_text(data = spotted_nutcrackers_aov_label, aes(x = 1, y = animal_ring_id, label = group),
            inherit.aes = FALSE, size = 4)+
  labs(
    y="density per individual"
  )+
  scale_x_log10(
    limits=c(1,20000),
    breaks=c(1,10,100,1000,10000)
  )+
  scale_fill_brewer(
    palette = "Spectral",
    name = "animal sex",
    labels = c("female","male")
  )+
  theme(
    legend.position = "none"
  )+ 
  expand_limits(y = length(unique(spotted_nutcrackers_stepwidth$animal_ring_id)) + 2)

p6 <-spotted_nutcrackers_stepwidth |> 
  ggplot(aes(animal_sex,stepwidth,fill=animal_sex))+
  geom_boxplot()+
  stat_compare_means(method = "anova", label.x.npc = 0.05)+
  scale_animal_sex()+
  scale_y_log10()+
  labs(
    x="animal sex"
  )

p5 + 
  p6 +
  plot_layout(widths = c(7.5,2.5)) + 
  plot_annotation(tag_levels = "A")
Figure 5: Differences in stepwidth between (A) individuals indicated by the density of their stepwidth and group according to the ANOVA and (B) sex

Discussion

With the exception of one individual, all nutcrackers showed recurring presence patterns in one area in the southeast and another in the northeast or east. For this reason, we focused our analysis on ten individuals. A limitation of the study is the small sample size, which restricts the ability to draw broadly generalizable conclusions. Nevertheless, the results reveal interesting trends that provide valuable starting points for future research.

The findings of this study offer new insights into the movement patterns of Eurasian nutcrackers (Nucifraga caryocatactes), particularly with regard to individual and sex-specific behaviors. The combination of recursive analysis, spatial clustering, and GPS tracking technology made it possible to identify frequently visited sites and thereby better understand individual spatial movement patterns. These methods highlight the importance of fine-scale spatial data for analyzing intraspecific differences.

Since all derived movement parameters — such as speed, directional changes, or path curvature — are strongly influenced by the chosen sampling rate Laube and Purves (2011), the 15-minute interval used allows for relatively precise analysis.

Individually scaled threshold values for identifying frequently visited sites

The threshold values used to identify frequently visited sites were scaled individually (based on the density distribution of revisits per location), limiting comparability between individuals due to the use of different thresholds. A location with 20 revisits may be classified as “frequently visited” for one individual but not for another. This, however, enables a more realistic and individualized assessment of movement behavior, as animals can differ greatly in how intensively they use certain locations. It is therefore important to interpret the results with the understanding that “frequently visited” is a relative, not absolute, measure depending on individual behavior.

Furthermore, not all frequently visited locations show high revisit density. This suggests that the functionality of these sites varies and could depend on factors such as habitat quality, accessibility, and ecological conditions. These findings underscore the complexity of movement behavior, which cannot be fully described by revisit frequency alone.

Frequently visited sites differ between individuals, and spatial clusters can be identified

We observed considerable variation in the spatial behavior of individuals. The frequently visited sites of individuals K125866, K125895, and K125874 were located around Lake Davos, while K125854, K125864, and K94634 primarily used the southern pine forest. This reflects not only individual differences in movement behavior, but also allowed us to identify spatial clusters.

Further interpretation of the ecological relevance of these clusters remains speculative due to limited data. However, the individual differences provide valuable insights into habitat preferences and the related ecological interactions. These differences may be influenced by factors such as food availability, avoidance of competition, or proximity to preferred breeding sites, offering meaningful directions for future studies on nutcracker space use.

Spatial distribution differences between males and females

The clustering analysis also revealed clear spatial differences between frequently visited sites. Females showed a slightly greater average stepwidth than males (p = 3.9e-05; Figure 5). However, the analysis is based on GPS data with a limited temporal resolution (15-minute intervals), which means movements occurring within these intervals were not captured. For deeper understanding, additional contextual information such as habitat data, seasonal patterns, or the reproductive status of individuals would be valuable.

Such behavioral differences are rarely explored in detail in the literature but offer important avenues for further research. A deeper understanding of these differences could help clarify how such behaviors influence regeneration and the long-term stability of plant populations.

Conclustion

Assessing the ecological implications of frequently visited sites remains a challenge. While GPS data provide valuable insights into nutcracker movements, it is difficult, for example, to evaluate cache quality or seedling success at these locations. Similar to earlier work that emphasized the need for stable isotope analysis or genetic methods to link seeds to parent trees, the integration of such data in future studies could help develop a more comprehensive picture of ecological dynamic.

Overall, the results of this study demonstrate how innovative tracking methods can be combined with classical ecological theory to better understand the role of nutcrackers in forest regeneration.

References

Auffret, Alistair G., Yessica Rico, James M. Bullock, Danny A. P. Hooftman, Robin J. Pakeman, Merel B. Soons, Alberto Suárez-Esteban, Anna Traveset, Helene H. Wagner, and Sara A. O. Cousins. 2017. “Plant Functional Connectivity Integrating Landscape Structure and Effective Dispersal.” Edited by Yvonne Buckley. Journal of Ecology 105 (6): 1648–56. https://doi.org/10.1111/1365-2745.12742.
Böhning-Gaese, Katrin, Tanja Caprano, Karin van Ewijk, and Michael Veith. 2006. “Range size: disentangling current traits and phylogenetic and biogeographic factors.” The American Naturalist 167 (4): 555–67. https://doi.org/10.1086/501078.
Bracis, Chloe, Keith L. Bildstein, and Thomas Mueller. 2018. “Revisitation Analysis Uncovers Spatio-Temporal Patterns in Animal Movement Data.” Ecography. https://doi.org/10.1111/ecog.03618.
Brehm, Allison M., and Alessio Mortelliti. 2022. “Small Mammal Personalities Generate Context Dependence in the Seed Dispersal Mutualism.” Proceedings of the National Academy of Sciences 119 (15): e2113870119. https://doi.org/10.1073/pnas.2113870119.
Buchholz, Richard, John D. Banusiewicz, Stephanie Burgess, Sarah Crocker-Buta, Lauren Eveland, and Lauren Fuller. 2019. “Behavioural Research Priorities for the Study of Animal Response to Climate Change.” Animal Behaviour 150 (April): 127–37. https://doi.org/10.1016/j.anbehav.2019.02.005.
Calenge, Clement. 2024. adehabitatHR: Home Range Estimation. https://CRAN.R-project.org/package=adehabitatHR.
Dall, Sasha R. X., Alasdair I. Houston, and John M. McNamara. 2004. “The Behavioural Ecology of Personality: Consistent Individual Differences from an Adaptive Perspective.” Ecology Letters 7 (8): 734–39. https://doi.org/10.1111/j.1461-0248.2004.00618.x.
Fandos, Guillermo, Lauren Talluto, Wolfgang Fiedler, Robert A. Robinson, Kasper Thorup, and Damaris Zurell. 2023. “Standardised Empirical Dispersal Kernels Emphasise the Pervasiveness of Long-Distance Dispersal in European Birds.” Journal of Animal Ecology 92 (1): 158–70. https://doi.org/10.1111/1365-2656.13838.
Graf, Valentin, Thomas Müller, Martin U. Grüebler, Urs G. Kormann, Jörg Albrecht, Anne G. Hertel, Marjorie C. Sorensen, Matthias Tschumi, and Eike Lena Neuschulz. 2024. “Individual Behaviour Shapes Patterns of Bird-Mediated Seed Dispersal.” Functional Ecology 38 (5): 1032–43. https://doi.org/10.1111/1365-2435.14556.
Hertel, Anne G., Petri T. Niemelä, Niels J. Dingemanse, and Thomas Mueller. 2020. “A Guide for Studying Among-Individual Behavioral Variation from Movement Data in the Wild.” Movement Ecology 8 (1): 30. https://doi.org/10.1186/s40462-020-00216-8.
Jordano, Pedro, Jordi Bascompte, and Jens M. Olesen. 2003. “Invariant Properties in Coevolutionary Networks of Plantanimal Interactions.” Ecology Letters 6 (1): 69–81. https://doi.org/10.1046/j.1461-0248.2003.00403.x.
Laube, Patrick, and Ross S. Purves. 2011. “How Fast Is a Cow? Cross-Scale Analysis of Movement Data.” Transactions in GIS 15 (3): 401–18. https://doi.org/10.1111/j.1467-9671.2011.01256.x.
Li, Ning, Zheng Wang, Xinhai Li, and Zhaohui Li. 2018. “Bird Functional Traits Affect Seed Dispersal Patterns of Chinas Endangered Trees Across Different Disturbed Habitats.” Avian Research 9 (1): 13. https://doi.org/10.1186/s40657-018-0105-x.
Maechler, Martin, Peter Rousseeuw, Anja Struyf, Mia Hubert, and Kurt Hornik. 2024. Cluster: Cluster Analysis Basics and Extensions. https://CRAN.R-project.org/package=cluster.
Mattes, Hermann. 1982. Die Lebensgemeinschaft von Tannenhäher, Nucifraga caryocatactes (L.), und Arve, Pinus Cembra L., und ihre forstliche Bedeutung in der oberen Gebirgswaldstufe. Berichte / Eidgenössische Anstalt für das Forstliche Versuchswesen, Birmensdorf ARRAY(0x556213c68e38). Teufen: Flück-Wirth.
Neuschulz, Eike Lena, Thomas Mueller, Kurt Bollmann, Felix Gugerli, and Katrin Böhning-Gaese. 2015. “Seed Perishability Determines the Caching Behaviour of a Food-Hoarding Bird.” Journal of Animal Ecology 84 (1): 71–78. https://doi.org/10.1111/1365-2656.12283.
Schleuning, Matthias, Jochen Fründ, and Daniel García. 2015. “Predicting Ecosystem Functions from Biodiversity and Mutualistic Networks: An Extension of Trait-Based Concepts to Plantanimal Interactions.” Ecography 38 (4): 380–92. https://doi.org/10.1111/ecog.00983.
Sorensen, Marjorie C., Thomas Mueller, Isabel Donoso, Valentin Graf, Dominik Merges, Marco Vanoni, Wolfgang Fiedler, and Eike Lena Neuschulz. 2022. “Scatter-Hoarding Birds Disperse Seeds to Sites Unfavorable for Plant Regeneration.” Movement Ecology 10 (1): 38. https://doi.org/10.1186/s40462-022-00338-1.
Wolf, Max, and Franz J. Weissing. 2012. “Animal Personalities: Consequences for Ecology and Evolution.” Trends in Ecology & Evolution 27 (8): 452–61. https://doi.org/10.1016/j.tree.2012.05.001.
Zwolak, Rafał, and Andrew Sih. 2020. “Animal Personalities and Seed Dispersal: A Conceptual Review.” Edited by Kwang Pum Lee. Functional Ecology 34 (7): 1294–1310. https://doi.org/10.1111/1365-2435.13583.

Appendix

Wordcount

Code
wordcountaddin:::text_stats()
Table 2: Word and character count using the ´wordcountaddin´
Method koRpus stringi
Word count 1641 1621
Character count 11423 11421
Sentence count 97 Not available
Reading time 8.2 minutes 8.1 minutes